"""
    礼帽和黑帽：
        cv.morphologyEx(img, op, kernel)
            参数：img：要处理的图像， op：处理方式，礼帽运算：cv.MORPH.TOPHAT,黑帽运算：cv.MORPH.BLACKHAT，kernel：核结构
            作用：礼帽运算：原图像和“开运算”的结果图之差，用来分离比临近点亮一些的斑块。
                  黑帽运算：为“闭运算”的结果与原图像之差，用来分离比临近点暗一些的斑块。
"""
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 1. 读取图像
img1 = cv.imread("image/letteropen.png")
img2 = cv.imread("image/letterclose.png")

# 2. 创建核结构
kernel = np.ones((10, 10), np.uint8)

# 3. 礼帽运算和黑帽运算
cvOpen = cv.morphologyEx(img1, cv.MORPH_TOPHAT, kernel)  # 礼帽运算
cvClose = cv.morphologyEx(img2, cv.MORPH_BLACKHAT, kernel)  # 黑帽运算

# 4. 图像展示
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(10, 8), dpi=100)
axes[0].imshow(img1[:, :, ::-1])
axes[0].set_title("原图1")
axes[1].imshow(cvOpen[:, :, ::-1])
axes[1].set_title("礼帽运算后结果")
axes[2].imshow(img2[:, :, ::-1])
axes[2].set_title("原图2")
axes[3].imshow(cvClose[:, :, ::-1])
axes[3].set_title("黑帽运算后结果")
plt.show()


